<!DOCTYPE html>
<html lang="en-us">
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    
<meta charset="UTF-8">
<title>Hardware | Elasticsearch: The Definitive Guide [2.x] | Elastic</title>
<link rel="home" href="index.html" title="Elasticsearch: The Definitive Guide [2.x]">
<link rel="up" href="deploy.html" title="Production Deployment">
<link rel="prev" href="deploy.html" title="Production Deployment">
<link rel="next" href="_java_virtual_machine.html" title="Java Virtual Machine">
<meta name="DC.type" content="Learn/Docs/Legacy/Elasticsearch/Definitive Guide/2.x">
<meta name="DC.subject" content="Elasticsearch">
<meta name="DC.identifier" content="2.x">
<meta name="robots" content="noindex,nofollow">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://cdn.optimizely.com/js/18132920325.js"></script>
    <link rel="apple-touch-icon" sizes="57x57" href="/apple-icon-57x57.png">
    <link rel="apple-touch-icon" sizes="60x60" href="/apple-icon-60x60.png">
    <link rel="apple-touch-icon" sizes="72x72" href="/apple-icon-72x72.png">
    <link rel="apple-touch-icon" sizes="76x76" href="/apple-icon-76x76.png">
    <link rel="apple-touch-icon" sizes="114x114" href="/apple-icon-114x114.png">
    <link rel="apple-touch-icon" sizes="120x120" href="/apple-icon-120x120.png">
    <link rel="apple-touch-icon" sizes="144x144" href="/apple-icon-144x144.png">
    <link rel="apple-touch-icon" sizes="152x152" href="/apple-icon-152x152.png">
    <link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png">
    <link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32">
    <link rel="icon" type="image/png" href="/android-chrome-192x192.png" sizes="192x192">
    <link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
    <link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16">
    <link rel="manifest" href="/manifest.json">
    <meta name="apple-mobile-web-app-title" content="Elastic">
    <meta name="application-name" content="Elastic">
    <meta name="msapplication-TileColor" content="#ffffff">
    <meta name="msapplication-TileImage" content="/mstile-144x144.png">
    <meta name="theme-color" content="#ffffff">
    <meta name="naver-site-verification" content="936882c1853b701b3cef3721758d80535413dbfd">
    <meta name="yandex-verification" content="d8a47e95d0972434">
    <meta name="localized" content="true">
    <meta name="st:robots" content="follow,index">
    <meta property="og:image" content="https://www.elastic.co/static/images/elastic-logo-200.png">
    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
    <link rel="icon" href="/favicon.ico" type="image/x-icon">
    <link rel="apple-touch-icon-precomposed" sizes="64x64" href="/favicon_64x64_16bit.png">
    <link rel="apple-touch-icon-precomposed" sizes="32x32" href="/favicon_32x32.png">
    <link rel="apple-touch-icon-precomposed" sizes="16x16" href="/favicon_16x16.png">
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    <link rel="stylesheet" type="text/css" href="/guide/static/styles.css">
  </head>

  <!--© 2015-2021 Elasticsearch B.V. Copying, publishing and/or distributing without written permission is strictly prohibited.-->

  <body>
    <!-- Google Tag Manager -->
    <script>dataLayer = [];</script><noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-58RLH5" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-58RLH5');</script>
    <!-- End Google Tag Manager -->

    <!-- Global site tag (gtag.js) - Google Analytics -->
    <script async src="https://www.googletagmanager.com/gtag/js?id=UA-12395217-16"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());
      gtag('config', 'UA-12395217-16');
    </script>

    <!--BEGIN QUALTRICS WEBSITE FEEDBACK SNIPPET-->
    <script type="text/javascript">
      (function(){var g=function(e,h,f,g){
      this.get=function(a){for(var a=a+"=",c=document.cookie.split(";"),b=0,e=c.length;b<e;b++){for(var d=c[b];" "==d.charAt(0);)d=d.substring(1,d.length);if(0==d.indexOf(a))return d.substring(a.length,d.length)}return null};
      this.set=function(a,c){var b="",b=new Date;b.setTime(b.getTime()+6048E5);b="; expires="+b.toGMTString();document.cookie=a+"="+c+b+"; path=/; "};
      this.check=function(){var a=this.get(f);if(a)a=a.split(":");else if(100!=e)"v"==h&&(e=Math.random()>=e/100?0:100),a=[h,e,0],this.set(f,a.join(":"));else return!0;var c=a[1];if(100==c)return!0;switch(a[0]){case "v":return!1;case "r":return c=a[2]%Math.floor(100/c),a[2]++,this.set(f,a.join(":")),!c}return!0};
      this.go=function(){if(this.check()){var a=document.createElement("script");a.type="text/javascript";a.src=g;document.body&&document.body.appendChild(a)}};
      this.start=function(){var a=this;window.addEventListener?window.addEventListener("load",function(){a.go()},!1):window.attachEvent&&window.attachEvent("onload",function(){a.go()})}};
      try{(new g(100,"r","QSI_S_ZN_emkP0oSe9Qrn7kF","https://znemkp0ose9qrn7kf-elastic.siteintercept.qualtrics.com/WRSiteInterceptEngine/?Q_ZID=ZN_emkP0oSe9Qrn7kF")).start()}catch(i){}})();
    </script><div id="ZN_emkP0oSe9Qrn7kF"><!--DO NOT REMOVE-CONTENTS PLACED HERE--></div>
    <!--END WEBSITE FEEDBACK SNIPPET-->

    <div id="elastic-nav" style="display:none;"></div>
    <script src="https://www.elastic.co/elastic-nav.js"></script>

    <!-- Subnav -->
    <div>
      <div>
        <div class="tertiary-nav d-none d-md-block">
          <div class="container">
            <div class="p-t-b-15 d-flex justify-content-between nav-container">
              <div class="breadcrum-wrapper"><span><a href="/guide/" style="font-size: 14px; font-weight: 600; color: #000;">Docs</a></span></div>
            </div>
          </div>
        </div>
      </div>
    </div>

    <div class="main-container">
      <section id="content">
        <div class="content-wrapper">

          <section id="guide" lang="en">
            <div class="container">
              <div class="row">
                <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                  <!-- start body -->
                  <div class="page_header">
<p>
  <strong>WARNING</strong>: The 2.x versions of Elasticsearch have passed their
  <a href="https://www.elastic.co/support/eol">EOL dates</a>. If you are running
  a 2.x version, we strongly advise you to upgrade.
</p>
<p>
  This documentation is no longer maintained and may be removed. For the latest
  information, see the <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html">current
  Elasticsearch documentation</a>.
</p>
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch: The Definitive Guide [2.x]</a></span>
»
<span class="breadcrumb-link"><a href="administration.html">Administration, Monitoring, and Deployment</a></span>
»
<span class="breadcrumb-link"><a href="deploy.html">Production Deployment</a></span>
»
<span class="breadcrumb-node">Hardware</span>
</div>
<div class="navheader">
<span class="prev">
<a href="deploy.html">« Production Deployment</a>
</span>
<span class="next">
<a href="_java_virtual_machine.html">Java Virtual Machine »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="hardware"></a>Hardware<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch-definitive-guide/edit/2.x/510_Deployment/20_hardware.asciidoc">edit</a>
</h2>
</div></div></div>
<p>If you’ve been following the normal development path, you’ve probably been playing
with Elasticsearch on your laptop or on a small cluster of machines lying around.
But when it comes time to deploy Elasticsearch to production, there are a few
recommendations that you should consider.  Nothing is a hard-and-fast rule;
Elasticsearch is used for a wide range of tasks and on a bewildering array of
machines.  But these recommendations provide good starting points based on our experience with
production clusters.</p>
<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_memory"></a>Memory<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch-definitive-guide/edit/2.x/510_Deployment/20_hardware.asciidoc">edit</a>
</h3>
</div></div></div>
<p>If there is one resource that you will run out of first, it will likely be memory.
Sorting and aggregations can both be memory hungry, so enough heap space to
accommodate these is important.  Even when the heap is comparatively small,
extra memory can be given to the OS filesystem cache.  Because many data structures
used by Lucene are disk-based formats, Elasticsearch leverages the OS cache to
great effect.</p>
<p>A machine with 64 GB of RAM is the ideal sweet spot, but 32 GB and 16 GB machines
are also common.  Less than 8 GB tends to be counterproductive (you end up
needing many, many small machines), and greater than 64 GB has problems that we will
discuss in <a class="xref" href="heap-sizing.html" title="Heap: Sizing and Swapping">Heap: Sizing and Swapping</a>.</p>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_cpus"></a>CPUs<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch-definitive-guide/edit/2.x/510_Deployment/20_hardware.asciidoc">edit</a>
</h3>
</div></div></div>
<p>Most Elasticsearch deployments tend to be rather light on CPU requirements.  As
such, the exact processor setup matters less than the other resources.  You should
choose a modern processor with multiple cores.  Common clusters utilize two- to eight-core machines.</p>
<p>If you need to choose between faster CPUs or more cores, choose more cores.  The
extra concurrency that multiple cores offers will far outweigh a slightly faster
clock speed.</p>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_disks"></a>Disks<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch-definitive-guide/edit/2.x/510_Deployment/20_hardware.asciidoc">edit</a>
</h3>
</div></div></div>
<p>Disks are important for all clusters, and doubly so for indexing-heavy clusters
(such as those that ingest log data).  Disks are the slowest subsystem in a server,
which means that write-heavy clusters can easily saturate their disks, which in
turn become the bottleneck of the cluster.</p>
<p>If you can afford SSDs, they are by far superior to any spinning media.  SSD-backed
nodes see boosts in both query and indexing performance.  If you can afford it,
SSDs are the way to go.</p>
<div class="sidebar">
<div class="titlepage"><div><div>
<p class="title"><strong>Check Your I/O Scheduler</strong></p>
</div></div></div>
<p>If you are using SSDs, make sure your OS I/O scheduler is configured correctly.
When you write data to disk, the I/O scheduler decides when that data is
<em>actually</em> sent to the disk.  The default under most *nix distributions is a
scheduler called <code class="literal">cfq</code> (Completely Fair Queuing).</p>
<p>This scheduler allocates <em>time slices</em> to each process, and then optimizes the
delivery of these various queues to the disk.  It is optimized for spinning media:
the nature of rotating platters means it is more efficient to write data to disk
based on physical layout.</p>
<p>This is inefficient for SSD, however, since there are no spinning platters
involved.  Instead, <code class="literal">deadline</code> or <code class="literal">noop</code> should be used instead.  The deadline
scheduler optimizes based on how long writes have been pending, while <code class="literal">noop</code>
is just a simple FIFO queue.</p>
<p>This simple change can have dramatic impacts.  We’ve seen a 500-fold improvement
to write throughput just by using the correct scheduler.</p>
</div>
<p>If you use spinning media, try to obtain the fastest disks possible (high-performance server disks, 15k RPM drives).</p>
<p>Using RAID 0 is an effective way to increase disk speed, for both spinning disks
and SSD.  There is no need to use mirroring or parity variants of RAID, since
high availability is built into Elasticsearch via replicas.</p>
<p>Finally, avoid network-attached storage (NAS).  People routinely claim their
NAS solution is faster and more reliable than local drives.  Despite these claims,
we have never seen NAS live up to its hype.  NAS is often slower, displays
larger latencies with a wider deviation in average latency, and is a single
point of failure.</p>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_network"></a>Network<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch-definitive-guide/edit/2.x/510_Deployment/20_hardware.asciidoc">edit</a>
</h3>
</div></div></div>
<p>A fast and reliable network is obviously important to performance in a distributed
system.  Low latency helps ensure that nodes can communicate easily, while
high bandwidth helps shard movement and recovery.  Modern data-center networking
(1 GbE, 10 GbE) is sufficient for the vast majority of clusters.</p>
<p>Avoid clusters that span multiple data centers, even if the data centers are
colocated in close proximity.  Definitely avoid clusters that span large geographic
distances.</p>
<p>Elasticsearch clusters assume that all nodes are equal—​not that half the nodes
are actually 150ms distant in another data center. Larger latencies tend to
exacerbate problems in distributed systems and make debugging and resolution
more difficult.</p>
<p>Similar to the NAS argument, everyone claims that their pipe between data centers is
robust and low latency. This is true—​until it isn’t (a network failure will
happen eventually; you can count on it). From our experience, the hassle of
managing cross–data center clusters is simply not worth the cost.</p>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_general_considerations"></a>General Considerations<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch-definitive-guide/edit/2.x/510_Deployment/20_hardware.asciidoc">edit</a>
</h3>
</div></div></div>
<p>It is possible nowadays to obtain truly enormous machines:  hundreds of gigabytes
of RAM with dozens of CPU cores.  Conversely, it is also possible to spin up
thousands of small virtual machines in cloud platforms such as EC2.  Which
approach is best?</p>
<p>In general, it is better to prefer medium-to-large boxes.  Avoid small machines,
because you don’t want to manage a cluster with a thousand nodes, and the overhead
of simply running Elasticsearch is more apparent on such small boxes.</p>
<p>At the same time, avoid the truly enormous machines.  They often lead to imbalanced
resource usage (for example, all the memory is being used, but none of the CPU) and can
add logistical complexity if you have to run multiple nodes per machine.</p>
</div>

</div>
<div class="navfooter">
<span class="prev">
<a href="deploy.html">« Production Deployment</a>
</span>
<span class="next">
<a href="_java_virtual_machine.html">Java Virtual Machine »</a>
</span>
</div>
</div>

                  <!-- end body -->
                </div>
                <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                  <div id="rtpcontainer" style="display: block;">
                    <div class="mktg-promo">
                      <h3>Most Popular</h3>
                      <ul class="icons">
                        <li class="icon-elasticsearch-white"><a href="https://www.elastic.co/webinars/getting-started-elasticsearch?baymax=default&amp;elektra=docs&amp;storm=top-video">Get Started with Elasticsearch: Video</a></li>
                        <li class="icon-kibana-white"><a href="https://www.elastic.co/webinars/getting-started-kibana?baymax=default&amp;elektra=docs&amp;storm=top-video">Intro to Kibana: Video</a></li>
                        <li class="icon-logstash-white"><a href="https://www.elastic.co/webinars/introduction-elk-stack?baymax=default&amp;elektra=docs&amp;storm=top-video">ELK for Logs &amp; Metrics: Video</a></li>
                      </ul>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </section>

        </div>


<div id="elastic-footer"></div>
<script src="https://www.elastic.co/elastic-footer.js"></script>
<!-- Footer Section end-->

      </section>
    </div>

<script src="/guide/static/jquery.js"></script>
<script type="text/javascript" src="/guide/static/docs.js"></script>
<script type="text/javascript">
  window.initial_state = {}</script>
  </body>
</html>
